﻿using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace Marmat.Forms
{
    public partial class TreeView
    {
        [DefaultValue(typeof(Color), "White")]
        public override Color BackColor
        {
            get
            {
                return base.BackColor;
            }

            set
            {
                base.BackColor = value;
            }
        }

        /// <summary>
    /// 获取或设置一个值，用以指示是否在树视图控件中的树节点旁显示复选框。
    /// </summary>
    /// <value></value>
    /// <returns>如果在树视图控件中的每个树节点旁显示复选框，则为 true；否则为 false。默认值为 false。</returns>
    /// <remarks></remarks>
        [DefaultValue(false)]
        public bool CheckBoxes { get; set; }

        /// <summary>
    /// 获取或设置绘制控件的模式。
    /// </summary>
    /// <value></value>
    /// <returns>System.Windows.Forms.TreeViewDrawMode 值之一。默认值为 System.Windows.Forms.TreeViewDrawMode.Normal。</returns>
    /// <remarks></remarks>
        [DefaultValue(typeof(TreeViewDrawMode), "Normal")]
        public TreeViewDrawMode DrawMode { get; set; } = TreeViewDrawMode.Normal;

        /// <summary>
    /// 获取或设置一个值，用以指示选择突出显示是否跨越树视图控件的整个宽度。
    /// </summary>
    /// <value></value>
    /// <returns>如果选择突出显示跨越树视图控件的整个宽度，则为 true；否则为 false。默认值为 false。</returns>
    /// <remarks></remarks>
        [DefaultValue(false)]
        public bool FullRowSelect { get; set; } = false;

        /// <summary>
    /// 获取或设置一个值，用以指示选定的树节点是否即使在树视图已失去焦点时仍会保持突出显示。
    /// </summary>
    /// <value></value>
    /// <returns>如果选定的树节点在树视图已失去焦点时不突出显示，则为 true；否则为 false。默认值为 true。</returns>
    /// <remarks></remarks>
        [DefaultValue(true)]
        public bool HideSelection { get; set; } = true;

        /// <summary>
    /// 获取或设置一个值，用以指示当鼠标指针移过树节点标签时，树节点标签是否具有超链接的外观。
    /// </summary>
    /// <value></value>
    /// <returns>如果当鼠标指针移过树节点标签时，树节点标签具有超链接的外观，则为 true；否则为 false。默认值为 True。</returns>
    /// <remarks></remarks>
        [DefaultValue(true)]
        public bool HotTracking { get; set; } = true;

        /// <summary>
    /// 获取或设置每个子树节点级别的缩进距离。
    /// </summary>
    /// <value></value>
    /// <returns>每个子树节点级别的缩进距离（以像素为单位）。默认值为 19。</returns>
    /// <remarks></remarks>
        [DefaultValue(19)]
        public int Indent { get; set; } = 19;

        /// <summary>
    /// 获取或设置树视图控件中每个树节点的高度。
    /// </summary>
    /// <value></value>
    /// <returns>树视图控件中每个树节点的高度（以像素为单位）。</returns>
    /// <remarks></remarks>
        public int ItemHeight
        {
            get
            {
                if (this._ItemHeight == -1)
                {
                    var flags = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter;
                    var Size = TextRenderer.MeasureText("正", this.Font, this.Size, flags);
                    return Size.Height + 3;
                }

                return this._ItemHeight;
            }

            set
            {
                this._ItemHeight = value;
            }
        }

        private int _ItemHeight = -1;

        /// <summary>
    /// 获取或设置一个值，用以指示是否可以编辑树节点的标签文本。
    /// </summary>
    /// <value></value>
    /// <returns>如果可以编辑树节点的标签文本，则为 true；否则为 false。默认值为 false。</returns>
    /// <remarks></remarks>
        [DefaultValue(false)]
        public bool LabelEdit
        {
            get
            {
                return this.m_LabelEdit;
            }

            set
            {
                if (value == false && this.TextBox is object && this.TextBox.Visible == true)
                {
                    this.TextBox.Visible = false;
                }

                this.m_LabelEdit = value;
            }
        }

        private bool m_LabelEdit = false;
    }
}